
import java.util.ArrayList;

import navalgo3.Modelo.Buque;
import navalgo3.Modelo.Destructor;
import navalgo3.Modelo.Este;
import navalgo3.Modelo.Lancha;
import navalgo3.Modelo.Noroeste;
import navalgo3.Modelo.Norte;
import navalgo3.Modelo.Oeste;
import navalgo3.Modelo.Portaaviones;
import navalgo3.Modelo.Posicion;
import navalgo3.Modelo.Rompehielos;
import navalgo3.Modelo.Sudeste;
import navalgo3.Modelo.Sur;


import junit.framework.TestCase;

public class NaveTests extends TestCase {
	
       public void testSeCreaBuqueAleatorio(){
    	   Buque mibuque = new Buque();
    	   assertTrue(true);
       }
       
       
	   public void testSeCreaLanchaAleatoria(){
       	Lancha miLancha = new Lancha();
       	assertTrue(true);
       }
	   
		public void testLanchaSeCreaEnUnaPosicion(){
			ArrayList<Posicion> posicionInicialLancha = new ArrayList();
			posicionInicialLancha.add(new Posicion(2,3));
			posicionInicialLancha.add(new Posicion(2,2));
    		Lancha lanchaActual = new Lancha(posicionInicialLancha, new Norte());
            assertTrue(lanchaActual.estaUbicadaEn(posicionInicialLancha));
		}
		
		public void testDestructorSeCreaEnUnaPosicion(){
			ArrayList<Posicion> posicionInicialDestructor = new ArrayList();
			posicionInicialDestructor.add(new Posicion(2,2));
			posicionInicialDestructor.add(new Posicion(3,2));
			posicionInicialDestructor.add(new Posicion(4,2));
    		Destructor destructorActual = new Destructor(posicionInicialDestructor, new Este());
            assertTrue(destructorActual.estaUbicadaEn(posicionInicialDestructor));
		}
		
		public void testBuqueSeCreaEnUnaPosicion(){
			ArrayList<Posicion> posicionInicialBuque = new ArrayList();
			posicionInicialBuque.add(new Posicion(7,6));
			posicionInicialBuque.add(new Posicion(6,6));
			posicionInicialBuque.add(new Posicion(5,6));
			posicionInicialBuque.add(new Posicion(4,6));
    		Buque buqueActual = new Buque(posicionInicialBuque, new Noroeste());
            assertTrue(buqueActual.estaUbicadaEn(posicionInicialBuque));
		}
		
		public void testPortaAvionesSeCreaEnUnaPosicion(){
			ArrayList<Posicion> posicionInicialPortaAviones = new ArrayList();
			posicionInicialPortaAviones.add(new Posicion(5,2));
			posicionInicialPortaAviones.add(new Posicion(5,3));
			posicionInicialPortaAviones.add(new Posicion(5,4));
			posicionInicialPortaAviones.add(new Posicion(5,5));
			posicionInicialPortaAviones.add(new Posicion(5,6));
    		Portaaviones portaAvionesActual = new Portaaviones(posicionInicialPortaAviones, new Sur());
            assertTrue(portaAvionesActual.estaUbicadaEn(posicionInicialPortaAviones));
		}
		
		public void testRompehielosSeCreaEnUnaPosicion(){
			ArrayList<Posicion> posicionInicialRompehielos = new ArrayList();
			posicionInicialRompehielos.add(new Posicion(3,2));
			posicionInicialRompehielos.add(new Posicion(3,3));
			posicionInicialRompehielos.add(new Posicion(3,4));
    		Rompehielos rompehielosActual = new Rompehielos(posicionInicialRompehielos, new Sudeste());
            assertTrue(rompehielosActual.estaUbicadaEn(posicionInicialRompehielos));
		}
		
        public void testLanchaSeMueveEntoncesCambiaSuPosicion(){
        	ArrayList<Posicion> posicionInicialLancha = new ArrayList();
			posicionInicialLancha.add(new Posicion(2,3));
			posicionInicialLancha.add(new Posicion(2,2));
    		Lancha lanchaActual = new Lancha(posicionInicialLancha, new Norte());
    		ArrayList<Posicion> posicionLanchaAlMoverse = new ArrayList();
			posicionLanchaAlMoverse.add(new Posicion(2,2));
			posicionLanchaAlMoverse.add(new Posicion(2,1));
            lanchaActual.mover();
            assertTrue(lanchaActual.estaUbicadaEn(posicionLanchaAlMoverse));
        }
        
        public void testPortaAvionesSeMueveEntoncesCambiaSuPosicion(){
        	ArrayList<Posicion> posicionInicialPortaAviones = new ArrayList();
			posicionInicialPortaAviones.add(new Posicion(5,2));
			posicionInicialPortaAviones.add(new Posicion(5,3));
			posicionInicialPortaAviones.add(new Posicion(5,4));
			posicionInicialPortaAviones.add(new Posicion(5,5));
			posicionInicialPortaAviones.add(new Posicion(5,6));
    		Portaaviones portaAvionesActual = new Portaaviones(posicionInicialPortaAviones, new Sur());
    		ArrayList<Posicion> posicionPortaAvionesAlMoverse = new ArrayList();
    		posicionPortaAvionesAlMoverse.add(new Posicion(5,3));
    		posicionPortaAvionesAlMoverse.add(new Posicion(5,4));
    		posicionPortaAvionesAlMoverse.add(new Posicion(5,5));
    		posicionPortaAvionesAlMoverse.add(new Posicion(5,6));
    		posicionPortaAvionesAlMoverse.add(new Posicion(5,7));
            portaAvionesActual.mover();
            assertTrue(portaAvionesActual.estaUbicadaEn(posicionPortaAvionesAlMoverse ));
    }
        
        public void testDestructorSeMueveEntoncesCambiaSuPosicion(){
        	ArrayList<Posicion> posicionInicialDestructor = new ArrayList();
			posicionInicialDestructor.add(new Posicion(2,2));
			posicionInicialDestructor.add(new Posicion(3,2));
			posicionInicialDestructor.add(new Posicion(4,2));
    		Destructor destructorActual = new Destructor(posicionInicialDestructor, new Este());
    		ArrayList<Posicion> posicionDestructorAlMoverse = new ArrayList();
    		posicionDestructorAlMoverse.add(new Posicion(3,2));
    		posicionDestructorAlMoverse.add(new Posicion(4,2));
    		posicionDestructorAlMoverse.add(new Posicion(5,2));
            destructorActual.mover();
            assertTrue(destructorActual.estaUbicadaEn(posicionDestructorAlMoverse));
        }
 
        public void testBuqueSeMueveEntoncesCambiaSuPosicion(){
        	ArrayList<Posicion> posicionInicialBuque = new ArrayList();
			posicionInicialBuque.add(new Posicion(7,6));
			posicionInicialBuque.add(new Posicion(7,5));
			posicionInicialBuque.add(new Posicion(7,4));
			posicionInicialBuque.add(new Posicion(7,3));
    		Buque buqueActual = new Buque(posicionInicialBuque, new Noroeste());
    		ArrayList<Posicion> posicionBuqueAlMoverse = new ArrayList();
    		posicionBuqueAlMoverse.add(new Posicion(6,5));
    		posicionBuqueAlMoverse.add(new Posicion(6,4));
    		posicionBuqueAlMoverse.add(new Posicion(6,3));
    		posicionBuqueAlMoverse.add(new Posicion(6,2));
            buqueActual.mover();
            assertTrue(buqueActual.estaUbicadaEn(posicionBuqueAlMoverse));
        }
        
        public void testRompeHielosSeMueveEntoncesCambiaSuPosicion(){
        	ArrayList<Posicion> posicionInicialRompehielos = new ArrayList();
			posicionInicialRompehielos.add(new Posicion(2,2));
			posicionInicialRompehielos.add(new Posicion(3,2));
			posicionInicialRompehielos.add(new Posicion(4,2));
    		Rompehielos rompehielosActual = new Rompehielos(posicionInicialRompehielos, new Sudeste());
    		ArrayList<Posicion> posicionRompehielosAlMoverse = new ArrayList();
    		posicionRompehielosAlMoverse.add(new Posicion(3,3));
    		posicionRompehielosAlMoverse.add(new Posicion(4,3));
    		posicionRompehielosAlMoverse.add(new Posicion(5,3));
            rompehielosActual.mover();
            assertTrue(rompehielosActual.estaUbicadaEn(posicionRompehielosAlMoverse));
        }
        
        public void testLanchaLlegaAlBordeSuperiorEntoncesSeInvierte(){
        	ArrayList<Posicion> posicionInicialLancha = new ArrayList();
			posicionInicialLancha.add(new Posicion(2,2));
			posicionInicialLancha.add(new Posicion(2,1));
    		Lancha lanchaActual = new Lancha(posicionInicialLancha, new Norte());
    		lanchaActual.mover();
            ArrayList<Posicion> posicionLanchaAlMoverse = new ArrayList();
            posicionLanchaAlMoverse.add(new Posicion(2,2));
            posicionLanchaAlMoverse.add(new Posicion(2,3));
            
			assertTrue(lanchaActual.estaUbicadaEn(posicionLanchaAlMoverse));
        }
        
        public void testLanchaLlegaAlBordeInferiorEntoncesSeInvierte(){
        	ArrayList<Posicion> posicionInicialLancha = new ArrayList();
			posicionInicialLancha.add(new Posicion(3,9));
			posicionInicialLancha.add(new Posicion(3,10));
    		Lancha lanchaActual = new Lancha(posicionInicialLancha, new Sur());
    		lanchaActual.mover();
            ArrayList<Posicion> posicionLanchaAlMoverse = new ArrayList();
			posicionLanchaAlMoverse.add(new Posicion(3,9));
			posicionLanchaAlMoverse.add(new Posicion(3,8));
			assertTrue(lanchaActual.estaUbicadaEn(posicionLanchaAlMoverse));
        }
        
        public void testLanchaLlegaAlBordeLateralIzquierdoEntoncesSeInvierte(){
        	ArrayList<Posicion> posicionInicialLancha = new ArrayList();
			posicionInicialLancha.add(new Posicion(2,5));
			posicionInicialLancha.add(new Posicion(1,5));
    		Lancha lanchaActual = new Lancha(posicionInicialLancha, new Oeste());
    		lanchaActual.mover();
            ArrayList<Posicion> posicionLanchaAlMoverse = new ArrayList();
			posicionLanchaAlMoverse.add(new Posicion(2,5));
			posicionLanchaAlMoverse.add(new Posicion(3,5));
			assertTrue(lanchaActual.estaUbicadaEn(posicionLanchaAlMoverse));
        }
        
        public void testLanchaLlegaAlBordeLateralDerechoEntoncesSeInvierte(){
        	ArrayList<Posicion> posicionInicialLancha = new ArrayList();
			posicionInicialLancha.add(new Posicion(9,3));
			posicionInicialLancha.add(new Posicion(10,3));
    		Lancha lanchaActual = new Lancha(posicionInicialLancha, new Este());
    		lanchaActual.mover();
            ArrayList<Posicion> posicionLanchaAlMoverse = new ArrayList();
			posicionLanchaAlMoverse.add(new Posicion(9,3));
			posicionLanchaAlMoverse.add(new Posicion(8,3));
			assertTrue(lanchaActual.estaUbicadaEn(posicionLanchaAlMoverse));
        }
        
        public void testPortaavionesSeCreaVerticalmente(){
        	ArrayList<Posicion> posicionInicialPortaAviones = new ArrayList();
			posicionInicialPortaAviones.add(new Posicion(5,2));
			posicionInicialPortaAviones.add(new Posicion(5,3));
			posicionInicialPortaAviones.add(new Posicion(5,4));
			posicionInicialPortaAviones.add(new Posicion(5,5));
			posicionInicialPortaAviones.add(new Posicion(5,6));
    		Portaaviones portaAvionesActual = new Portaaviones(posicionInicialPortaAviones, new Este());
        	assertTrue(portaAvionesActual.estaVertical() == true);
        }
        
        public void testDestructorSeCreaHorizontalmente(){
        	ArrayList<Posicion> posicionInicialDestructor = new ArrayList();
			posicionInicialDestructor.add(new Posicion(2,2));
			posicionInicialDestructor.add(new Posicion(3,2));
			posicionInicialDestructor.add(new Posicion(4,2));
    		Destructor destructorActual = new Destructor(posicionInicialDestructor, new Norte());
            assertTrue(destructorActual.estaVertical() == false);
        }
}



